package com.xuwang.service.impl;

import com.xuwang.mapper.GovernmentStaffMapper;
import com.xuwang.pojo.GovernmentStaff;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * @Author: YuePeng
 * @Date: 2021/9/13 18:23
 * @Version: 1.0
 */
@Service
public class ExportExcelServiceImpl {
    @Resource
    private GovernmentStaffMapper governmentStaffMapper;

    public void exportExcel(String ids, HttpServletResponse response) throws IOException {
        String[] idArray = ids.split(",");
        List<String> list = new ArrayList<>();
        list.addAll(Arrays.asList(idArray));
        System.out.println("id list:---"+list);
        List<GovernmentStaff> governmentStaffList = governmentStaffMapper.selectByIds(list);
        System.out.println("governmentStaffList:---"+governmentStaffList.toString());

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("政府人员表");

        Font f = workbook.createFont();                                // 创建字体
        f.setFontHeightInPoints((short) 10);                     // 创建字体样式：字体大小
        f.setColor(IndexedColors.BLACK.getIndex());              // 创建字体样式：字体类型(这里设置的是黑体)
        //f.setBold(true);

        Font f2 = workbook.createFont();                                // 创建字体
        f2.setFontHeightInPoints((short) 10);                     // 创建字体样式：字体大小
        f2.setColor(IndexedColors.RED.getIndex());              // 创建字体样式：字体类型(这里设置的是黑体)
        //f2.setBold(true);                                         // 创建字体样式：粗体

        CellStyle cs = workbook.createCellStyle();                     // 创建单元格每列格式对象
        cs.setFont(f);                                           // 把字体样式保存到样式单中
//        cs.setBorderLeft(BorderStyle.THIN);                      // 设置具有边框的效果：左边框
//        cs.setBorderRight(BorderStyle.THIN);                     // 设置具有边框的效果：右边框
//        cs.setBorderTop(BorderStyle.THIN);                       // 设置具有边框的效果：上边框
//        cs.setBorderBottom(BorderStyle.THIN);                    // 设置具有边框的效果：下边框
//        cs.setAlignment(HorizontalAlignment.CENTER);             // 设置文字居中的效果

        CellStyle cs2 = workbook.createCellStyle();                     // 创建单元格每列格式对象
        cs2.setFont(f2);                                           // 把字体样式保存到样式单中
//        cs2.setBorderLeft(BorderStyle.THIN);                      // 设置具有边框的效果：左边框
//        cs2.setBorderRight(BorderStyle.THIN);                     // 设置具有边框的效果：右边框
//        cs2.setBorderTop(BorderStyle.THIN);                       // 设置具有边框的效果：上边框
//        cs2.setBorderBottom(BorderStyle.THIN);                    // 设置具有边框的效果：下边框
//        cs2.setAlignment(HorizontalAlignment.CENTER);             // 设置文字居中的效果

        Row row = sheet.createRow(0);                      // 在当前sheet页上创建一个新行
        createCell(0, "姓名", cs2, sheet, row);
        createCell(1, "所属部门", cs2, sheet, row);
        createCell(2, "职位", cs2, sheet, row);
        createCell(3, "性别", cs2, sheet, row);
        createCell(4, "身份证号码", cs2, sheet, row);
        createCell(5, "执法证号", cs2, sheet, row);
        createCell(6, "办公室电话", cs2, sheet, row);
        createCell(7, "个人电话", cs2, sheet, row);
        createCell(8, "序号", cs2, sheet, row);

        for (int i = 0; i < governmentStaffList.size(); i++) {                 // 设置每行每列的值  Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
            row = sheet.createRow(i + 1);                      // 在当前sheet页上创建一个新行
            GovernmentStaff governmentStaff = governmentStaffList.get(i);
            createCell(0, governmentStaff.getStaffName(), cs, sheet, row);
            createCell(1, governmentStaff.getGovernmentDepartment().getDepartmentName(), cs, sheet, row);
            createCell(2, governmentStaff.getGovernmentJob().getJobName(), cs, sheet, row);
            createCell(3, String.valueOf(governmentStaff.getSex()==0?'女':'男'), cs, sheet, row);
            createCell(4, governmentStaff.getIdNumber(), cs, sheet, row);
            createCell(5, governmentStaff.getLawNumber(), cs, sheet, row);
            createCell(6, governmentStaff.getOfficePhone(), cs, sheet, row);
            createCell(7, governmentStaff.getPersonalPhone(), cs, sheet, row);
            createCell(8, String.valueOf(governmentStaff.getStaffNumber()), cs, sheet, row);
        }

        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition","attachment; filename=" + System.currentTimeMillis() + ".xls");
        //获取响应报文输出流对象
        ServletOutputStream out = response.getOutputStream();
        //输出
        workbook.write(out);
        out.flush();
        out.close();
    }

    public void createCell(int cellNum, String cellValue, CellStyle cs, Sheet sheet, Row row01) {
        sheet.setColumnWidth(cellNum, 256 * 35);            // 设置列宽。第一个参数表示要为第几列，第二个参数表示列的宽度，值为像素值。
        Cell cell01 = row01.createCell(cellNum);               // 在row行上创建一列
        cell01.setCellValue(cellValue);                        // 在此列上写入数据
        cell01.setCellStyle(cs);                              // 在此列上添加样式
    }
}
